﻿#ifndef SERIALPORTINFO_H
#define SERIALPORTINFO_H

#include <QObject>
#include <QSerialPortInfo>
#include <QList>
#include <QString>
#include <QAbstractListModel>


// SerialPortInfo类继承自QAbstractListModel，用于管理串口信息列表
class SerialPortInfo : public QAbstractListModel
{
    Q_OBJECT
public:
    // 定义SerialPortInfoRoles枚举，用于数据访问和表示
    enum SerialPortInfoRoles {
        portRole = Qt::UserRole + 1,// 串口名称的角色
    };

    // 构造函数，接受一个父对象
    SerialPortInfo(QObject *parent = 0);


    // 添加新的串口名称到模型
    Q_INVOKABLE void addSerialPort(const QString &serialPortName);
    // 添加所有可用的串口名称到模型
    Q_INVOKABLE void addAll();
    // 更新串口信息
    Q_INVOKABLE void update();
    // 清除模型中的所有串口信息
    Q_INVOKABLE void clear();

    // 返回模型中的行数
    int rowCount(const QModelIndex & parent = QModelIndex()) const;

    // 返回指定模型索引和角色的数据
    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

protected:
    // 返回一个哈希表，将自定义角色映射到角色名称
    QHash<int, QByteArray> roleNames() const;
private:
    // 串口名称列表
    QList<QString> m_serialPortInfo;


};
#endif // SERIALPORTINFO_H
